<?php
/**
 *  Klass för att hantera med arrayer
 */
class ArrayHandler {
    
    private function isAssociative($array) {

        if(array_keys($array) !== range(0, count($array) - 1)) {
            return true ;
        }

        return false ;
    }
    //en funktion som vänder på ordningen på en array
    //tex. array("Kalle", "Nisse", "Olle") skall bli array("Olle", "Nisse", "Kalle");
    public function ReverseArray($array) {
        $result = array();

        // Check if the array is associative or not
        if($this->isAssociative($array)){
            $i = 0 ;

            // For each post in the array
            foreach($array as $key => $value) {
                
                // Check if the key is an int and if it is the "next" int in order, in cased of mixed associative
                if (is_int($key) && $i === $key) {
                    // In that case add the value to the new array without bringing the key
                    array_unshift($result, $value) ;
                    $i++ ;

                } else {
                    // else add the value to the new array with the asme key
                    $result = array($key => $value) + $result ;
                }
            } 
        } else {
            foreach($array as $value) {
                // just push the values from the top instead of the bottom
                array_unshift($result, $value) ;
            }
        }
        
        // return the shifted array
        return $result;
    }
		
    //en funktion som returnerar sista elementet i en array
    public function ReturnLastItem($array) {
        $lastItem = "" ;
        foreach($array as $value) {
            $lastItem = $value ;
        } 
        return $lastItem ;
    }	
	
    //En funktion för test av funktionerna i array.php
    public function Test() {
	//En testarray
        // $testArray = array("test" => 1, 2, "third" => 3, "four", 5);
        $testArray = array() ;

        // Testa IsAssociative

        if($this->IsAssociative($testArray) != true) {
            echo "IsAssociative test fungerar inte." ;
            return false ;
        }

        //Testa ReverseArray
        $resultArray = $this->ReverseArray($testArray);
        //$reversedArray = array(5, "four", "third" => 3, 2, "test" => 1);
        $reversedArray = array() ;

        while ((list($var, $val) = each($reversedArray)) && (list($var2, $val2) = each($resultArray))){
            if($var != $var2 || $val != $val2) {
                echo "ReversedArray test misslyckades: arrayerna är inte lika <br />
                    $var är inte $var2 eller så är $val inte $val2<br />";
                var_dump($reversedArray) ;
                echo "<br />" ;
                var_dump($resultArray) ;
                return false ;
            }
        }

	if ($this->ReturnLastItem($testArray) != "") {
	    echo "ReturnLastItem test misslyckades: felaktigt returvärde </br>";
	    return false;
	}
	return true;   	
    }
}
